package com.kyl.mapper;


import com.kyl.dto.DeptDto;
import com.kyl.entity.Dept;
import com.kyl.vo.DeptVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @title DeptMapper
 * @description 
 * @author WanJl
 * @version 1.0
 * @create 2025/1/6
 */
@Mapper
public interface DeptMapper {
    /**
     * 根据部门查询条件选择部门列表
     *
     * @param deptDto 部门查询条件封装对象，包含可能的查询参数如部门名称、部门编号等
     * @return 返回符合查询条件的部门列表
     */
    List<Dept> selectList(@Param("deptDto")DeptDto deptDto);

    /**
     * 插入一个新的部门记录
     *
     * @param dept 要插入的部门对象，包含部门的各种属性如部门名称、部门编号等
     * @return 返回插入操作影响的行数，通常为1表示成功，0表示失败
     */
    int insert(Dept dept);

    /**
     * 清除指定部门的其他领导
     * 当一个部门的领导发生变化时，此方法用于确保一个部门仅有一个有效的领导
     *
     * @param leaderId 当前部门领导的ID，用于标识需要保留的领导记录
     * @param deptNo 部门编号，用于定位哪个部门的领导需要被清除
     */
    void clearOtherDeptLeader(@Param("leaderId")Long leaderId, @Param("deptNo")String deptNo);

    int updateByPrimaryKey(Dept dept);

    int hasChildByDeptId(String deptNo);

    int checkDeptExistUser(String deptNo);

    int deleteByDeptNo(String deptNo);

    Dept selectByDeptNo(String deptNo);

    List<Dept> findDeptInDeptNos(@Param("deptNos")List<String> deptNos);

    List<DeptVo> findDeptVoListInRoleId(@Param("roleIds")List<Long> roleIdSet);
}
